package HashMap;

import HashMap.Nodo.Operacion;
import java.util.LinkedList;

public final class GenerarCodigoNASM {

    private static GenerarCodigoNASM instancia = new GenerarCodigoNASM();
    private LinkedList<Operacion> listaOperaciones = new LinkedList<>();
    private LinkedList<Operacion> listaOperacionesBloque = new LinkedList<>();
    private int contador = 0;
    private boolean isBloque = false;

    private GenerarCodigoNASM() {
    }

    public static GenerarCodigoNASM getInstancia() {
        return instancia;
    }

    public void addOperacion(Operacion operacion) {
        if (isBloque) {
            listaOperacionesBloque.add(operacion);
        } else {
            listaOperaciones.add(operacion);
        }
    }

    public void iniciarBloque() {
        this.isBloque = true;
    }

    public LinkedList<Operacion> finalizarBloque() {
        this.isBloque = false;
        LinkedList<Operacion> retorno = listaOperacionesBloque;
        listaOperacionesBloque = new LinkedList<>();
        return retorno;
    }

    public int getSize() {
        return listaOperaciones.size();
    }

    public int getSizeBloque() {
        return listaOperacionesBloque.size();
    }

    public String getNombreVariableAuxiliar() {
        contador = contador + 1;
        return "OperacionAux" + contador;
    }

    public String generarCodigo() {
        StringBuilder builder = new StringBuilder();
        for (Operacion operacion : listaOperaciones) {
            builder.append(operacion.generarCodigoNASM());
            builder.append("\n");
        }
        return builder.toString();
    }
}
